package iset

import "fmt"

// HashSet => map[string]struct{}
// Go 语言标准库没有提供 Set 的实现，通常声明为 map[string]struct{}，由于struct{}是空，不关心内容
// Map 可以通过“comma ok”机制来获取该key是否存在,例如_, ok := map["key"],如果没有对应的值，ok为false
type HashSet map[interface{}]struct{}

func (s HashSet) Contains(key string) bool {
	_, ok := s[key]
	return ok
}

func (s HashSet) Put(key string) {
	s[key] = struct{}{}
}

func (s HashSet) Remove(key string) {
	delete(s, key)
}

func main() {
	s := make(HashSet)
	s.Put("Tom")
	s.Put("Sam")
	fmt.Println(s.Contains("Tom"))
	fmt.Println(s.Contains("Jack"))
}
